home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
JCSM Shareware Collection 1993 November
/
JCSM Shareware Collection - 1993-11.iso
/
cl720
/
qbnws31j.lzh
/
VIEWFILE.BAS
< prev
next >
Wrap
BASIC Source File
|
1992-03-19
|
3KB
|
86 lines
' VIEWFILE.BAS by Matt Hart
' View any size text file without any temporary files.
' Keeps the SEEK position of each line in a long integer array -
' which does limit this to 16,384 lines of text (and makes this
' program easy, small, and fast.) Key controls are up, down,
' left, right, page up, page down, end, home, and escape.
'
'$DYNAMIC
DEFINT A-Z
'
CONST false = 0
CONST true = NOT false
CLS
LINE INPUT "File Name: "; File$
' File$ = "VIEW.BAS"
' File$ = "c:\binkley\nodelist\nodelist.235"
Escape = false
'
OPEN "I", 1, File$
REDIM Seeks&(1 TO 16384) ' Max number of lines if 16384
CurSeek& = 1
NumLines = 0
DO UNTIL EOF(1)
LINE INPUT #1, Text$
NumLines = NumLines + 1
Seeks&(NumLines) = CurSeek& ' Save starting position
CurSeek& = CurSeek& + LEN(Text$) + 2 ' Next position - 2 is
LOOP ' for C/R & LF
'
CurCol = 1 ' Current Column
SeekEl = 1 ' Current line
Escape = false
DO
GOSUB LoadAndDisplay
GOSUB KeyProcess
LOOP UNTIL Escape
CLOSE 1
END
LoadAndDisplay:
SEEK #1, Seeks&(SeekEl)
FOR i = 1 TO 24
IF NOT EOF(1) THEN LINE INPUT #1, Text$ ELSE Text$ = ""
Strg$ = SPACE$(80)
IF LEN(Text$) < CurCol THEN Text$ = Text$ + SPACE$(CurCol - LEN(Text$))
LSET Strg$ = MID$(Text$, CurCol)
LOCATE i, 1, 0: PRINT Strg$;
NEXT i
RETURN
KeyProcess:
A$ = INKEY$: IF A$ = "" THEN GOTO KeyProcess
SELECT CASE A$
CASE CHR$(27): Escape = true ' ESC
CASE CHR$(0) + CHR$(72) ' Up Arrow
SeekEl = SeekEl - 1
IF SeekEl < 1 THEN SeekEl = 1: GOTO KeyProcess
CASE CHR$(0) + CHR$(80) ' Dn Arrow
SeekEl = SeekEl + 1
IF SeekEl + 23 > NumLines THEN SeekEl = SeekEl - 1: GOTO KeyProcess
CASE CHR$(0) + CHR$(77) ' Right Arrow
CurCol = CurCol + 1
CASE CHR$(0) + CHR$(75) ' Left Arrow
CurCol = CurCol - 1
IF CurCol < 1 THEN CurCol = 1: GOTO KeyProcess
CASE CHR$(0) + CHR$(73) ' Page Up
SeekEl = SeekEl - 24
IF SeekEl < 1 THEN SeekEl = 1
CASE CHR$(0) + CHR$(81) ' Page Dn
SeekEl = SeekEl + 24
IF SeekEl > NumLines THEN
SeekEl = NumLines - 23: GOTO KeyProcess
END IF
CASE CHR$(0) + CHR$(71) ' Home
SeekEl = 1
CASE CHR$(0) + CHR$(79) ' End
SeekEl = NumLines - 23
IF SeekEl < 1 THEN SeekEl = 1: GOTO KeyProcess
CASE ELSE
GOTO KeyProcess
END SELECT
RETURN